home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 001-025 / disk_008 / src / hack.bones.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  78 lines

  1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
  2.  
  3. #include "hack.h"
  4. extern char plname[PL_NSIZ];
  5. extern struct monst *makemon();
  6.  
  7. char bones[] = "bones_xx";
  8.  
  9. /* save bones and possessions of a deceased adventurer */
  10. savebones(){
  11. register int fd;
  12. register struct obj *otmp;
  13. register struct gen *gtmp;
  14. register struct monst *mtmp;
  15.     if(!rn2(1 + dlevel/2)) return;    /* not so many ghosts on low levels */
  16.     bones[6] = '0' + (dlevel/10);
  17.     bones[7] = '0' + (dlevel%10);
  18.     if((fd = open(bones,0)) >= 0){
  19.         (void) close(fd);
  20.         return;
  21.     }
  22.     /* drop everything; the corpse's possessions are usually cursed */
  23.     otmp = invent;
  24.     while(otmp){
  25.         otmp->ox = u.ux;
  26.         otmp->oy = u.uy;
  27.         otmp->known = 0;
  28.         otmp->age = 0;        /* very long ago */
  29.         otmp->owornmask = 0;
  30.         if(rn2(5)) otmp->cursed = 1;
  31.         if(!otmp->nobj){
  32.             otmp->nobj = fobj;
  33.             fobj = invent;
  34.             invent = 0;    /* superfluous */
  35.             break;
  36.         }
  37.         otmp = otmp->nobj;
  38.     }
  39.     if(!(mtmp = makemon(PM_GHOST, u.ux, u.uy))) return;
  40.     mtmp->mx = u.ux;
  41.     mtmp->my = u.uy;
  42.     mtmp->msleep = 1;
  43.     (void) strcpy((char *) mtmp->mextra, plname);
  44.     mkgold(somegold() + d(dlevel,30), u.ux, u.uy);
  45.     u.ux = FAR;        /* avoid animals standing next to us */
  46.     keepdogs();        /* all tame animals become wild again */
  47.     for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){
  48.         mtmp->mlstmv = 0;
  49.         if(mtmp->mdispl) unpmon(mtmp);
  50.     }
  51.     for(gtmp = ftrap; gtmp; gtmp = gtmp->ngen)
  52.         gtmp->gflag &= ~SEEN;
  53.     for(otmp = fobj; otmp; otmp = otmp->nobj)
  54.         otmp->onamelth = 0;
  55.     if((fd = creat(bones, FMASK)) < 0) return;
  56.     savelev(fd);
  57.     (void) close(fd);
  58. }
  59.  
  60. getbones(){
  61. register int fd,x,y,ok;
  62.     if(rn2(3)) return(0);    /* only once in three times do we find bones */
  63.     bones[6] = '0' + dlevel/10;
  64.     bones[7] = '0' + dlevel%10;
  65.     if((fd = open(bones, 0)) < 0) return(0);
  66.     if((ok = uptodate(fd)) != 0){
  67.         (void) getlev(fd);
  68.         (void) close(fd);
  69.         for(x = 0; x < COLNO; x++) for(y = 0; y < ROWNO; y++)
  70.             levl[x][y].seen = levl[x][y].new = 0;
  71.     }
  72.     if(unlink(bones) < 0){
  73.         pline("Cannot unlink %s", bones);
  74.         return(0);
  75.     }
  76.     return(ok);
  77. }
  78.